home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / MATH / MFLOAT10.ZIP / PI.PAS < prev    next >
Pascal/Delphi Source File  |  1993-04-28  |  3KB  |  130 lines

  1. PROGRAM pi(input, output);
  2. { *** Here are some methods demonstrated to calculate the number pi *** }
  3.  
  4. USES pfloat, crt;
  5.  
  6. VAR a,b,c, bound : mfloat;
  7.     i            : integer;
  8.  
  9. BEGIN
  10.   ClrScr;
  11.   Setmantissawords(15);
  12.   Getonem(bound);
  13.   ldexpm(bound, -16 * Getmantissawords - 16);
  14.   writeln('                            Calculation of PI');
  15.   writeln('                            =================');
  16.   writeln;
  17.   writeln;
  18.   writeln('PI = 16 * arctan(1 / 5) - 4 * arctan(1 / 239) :');
  19.   Getonem(a);
  20.   multi(a,16);
  21.   divi(a,5);
  22.   equm(b,a);
  23.   i := 0;
  24.   REPEAT
  25.     i := i + 1;
  26.     divi(b, 25);
  27.     equm(c, b);
  28.     divi(c, 2 * i + 1);
  29.     IF odd(i) THEN
  30.       subm(a, c)
  31.     ELSE
  32.       addm(a, c);
  33.   UNTIL gtm(bound, c);
  34.   getonem(b);
  35.   multi(b, 4);
  36.   divi(b, 239);
  37.   subm(a, b);
  38.   i := 0;
  39.   REPEAT
  40.     i := i + 1;
  41.     divi(b, 239);
  42.     divi(b, 239);
  43.     equm(c, b);
  44.     divi(c, 2 * i + 1);
  45.     IF odd(i) THEN
  46.       addm(a, c)
  47.     ELSE
  48.       subm(a, c);
  49.   UNTIL gtm(bound, c);
  50.   writeln(mftostr(a,80, '.F77'));
  51.   writeln;
  52.   writeln('*******************************************************************************');
  53.   writeln;
  54.   writeln('PI = 48 * arctan(1 / 18)  + 32 * arctan(1 / 57) - 20 * arctan(1 / 239) :');
  55.   getonem(a);
  56.   multi(a, 8);
  57.   divi(a, 3);
  58.   equm(b, a);
  59.   i := 0;
  60.   REPEAT
  61.     i := i + 1;
  62.     divi(b, 324);
  63.     equm(c, b);
  64.     divi(c, 2 * i + 1);
  65.     IF odd(i) THEN
  66.       subm(a, c)
  67.     ELSE
  68.       addm(a, c);
  69.   UNTIL gtm(bound, c);
  70.   getonem(b);
  71.   multi(b, 32);
  72.   divi(b, 57);
  73.   addm(a, b);
  74.   i := 0;
  75.   REPEAT
  76.     i := i + 1;
  77.     divi(b, 3249);
  78.     equm(c, b);
  79.     divi(c, 2 * i + 1);
  80.     IF odd(i) THEN
  81.       subm(a, c)
  82.     ELSE
  83.       addm(a, c);
  84.   UNTIL gtm(bound, c);
  85.   getonem(b);
  86.   multi(b, 20);
  87.   divi(b, 239);
  88.   subm(a, b);
  89.   i := 0;
  90.   REPEAT
  91.     i := i + 1;
  92.     divi(b, 239);
  93.     divi(b, 239);
  94.     equm(c, b);
  95.     divi(c, 2 * i + 1);
  96.     IF odd(i) THEN
  97.       addm(a, c)
  98.     ELSE
  99.       subm(a, c);
  100.   UNTIL gtm(bound, c);
  101.   writeln(mftostr(a,80, '.F77'));
  102.   writeln;
  103.   writeln('*******************************************************************************');
  104.   writeln;
  105.   writeln('PI = 6 * arctan(1 / sqrt(3)) :');
  106.   Getonem(a);
  107.   multi(a, 3);
  108.   sqrtm(a);
  109.   multi(a, 2);
  110.   equm(b, a);
  111.   i := 0;
  112.   REPEAT
  113.     i := i + 1;
  114.     divi(b, 3);
  115.     equm(c, b);
  116.     divi(c, 2 * i + 1);
  117.     IF odd(i) THEN
  118.       subm(a, c)
  119.     ELSE
  120.       addm(a, c);
  121.   UNTIL gtm(bound, c);
  122.   writeln(mftostr(a,80, '.F77'));
  123.   writeln;
  124.   writeln('*******************************************************************************');
  125.   writeln;
  126.   writeln('Internal PI :');
  127.   Getpim(a);
  128.   writeln(mftostr(a,80, '.F77'));
  129.   writeln;
  130. END.